﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Contratos;
using Model.Tipologias;

namespace welwitschia.Contratos
{
    public partial class ContratoRefeicaoPrecoDetalhe : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {

                IContratoService contratoService = new ContratoService();
                if (!String.IsNullOrEmpty(Request.QueryString["rcid"]))
                {
                    if (String.IsNullOrEmpty(Request.QueryString["tsc"]))
                    {
                        RefeicaoContrato refeicaoContrato =
                            contratoService.ObterRefeicaoPorIdRefeicaoContratada(Convert.ToInt64(Request.QueryString["rcid"]));
                        ModelParaView(refeicaoContrato);
                    }
                    else
                    {
                        PrecoRefeicaoContrato precoRefeicaoContrato =
                            contratoService.ObterPrecoPorIdRefeicaoContratadaCodTipoPreco(
                                Convert.ToInt64(Request.QueryString["rcid"]), Request.QueryString["tsc"].ToString());
                        ModelParaView(precoRefeicaoContrato);
                    }
                }
                else
                {
                    throw new Exception("Parâmetro inválido!");
                }
            }
            
        }

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            IContratoService contratoService = new ContratoService();
            PrecoRefeicaoContrato precoRefeicaoContrato = new PrecoRefeicaoContrato();
            
            precoRefeicaoContrato = ViewParaModel(precoRefeicaoContrato);

            if (String.IsNullOrEmpty(hfCodCodTipoServico.Value))
            {
                contratoService.Insere(precoRefeicaoContrato);
            }
            else
            {
                contratoService.Actualiza(precoRefeicaoContrato);
            }

            hfCodCodTipoServico.Value = precoRefeicaoContrato.TipoServico.Codigo;
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect(@"~\Contratos\ContratoRefeicaoDetalhe.aspx?rcid=" + hfIdRefeicaoContratada.Value);
        }

        private void ModelParaView(RefeicaoContrato refeicaoContrato)
        {
            txtClasseRefeicao.Text = refeicaoContrato.TipoClasseRefeicao.Descricao;
            txtDataContrato.Text = refeicaoContrato.Contrato.DataContrato.ToString();
            txtDesignacao.Text = refeicaoContrato.Contrato.Unidade.Designacao;
            txtIdCliente.Text = refeicaoContrato.Contrato.Cliente.IdCliente.ToString();
            txtIdUnidade.Text = refeicaoContrato.Contrato.Unidade.IdUnidade.ToString();
            txtNomeCliente.Text = refeicaoContrato.Contrato.Cliente.Nome;
            txtNumeroContrato.Text = refeicaoContrato.Contrato.NumeroContrato.ToString();
            txtTipoRefeicao.Text = refeicaoContrato.TipoRefeicao.Descricao;
            
            hfIdRefeicaoContratada.Value = refeicaoContrato.IdRefeicaoContratada.ToString();
            hfCodCodTipoServico.Value = String.Empty;
            
            ITipologiaService tipologiaService = new TipologiaService();
            ddlTipoServico.DataSource = tipologiaService.ObterPorTipo("TipoServico");
            ddlTipoServico.DataTextField = "Descricao";
            ddlTipoServico.DataValueField = "Codigo";
            ddlTipoServico.DataBind();
            ddlTipoServico.Items.Insert(0, new ListItem() { Text = String.Empty, Value = "-1000" });
        }

        private void ModelParaView(PrecoRefeicaoContrato precoRefeicaoContrato)
        {
            ModelParaView(precoRefeicaoContrato.RefeicaoContratada);
            ddlTipoServico.SelectedValue = precoRefeicaoContrato.TipoServico.Codigo;
            txtPreco.Text = precoRefeicaoContrato.Preco.ToString();
            hfCodCodTipoServico.Value = precoRefeicaoContrato.TipoServico.Codigo; 
        }

        private PrecoRefeicaoContrato ViewParaModel(PrecoRefeicaoContrato precoRefeicaoContrato)
        {
            precoRefeicaoContrato.Preco = Convert.ToDecimal(txtPreco.Text);
            precoRefeicaoContrato.TipoServico = new Tipologia() { Codigo = ddlTipoServico.SelectedValue };
            precoRefeicaoContrato.RefeicaoContratada =
                new RefeicaoContrato() { IdRefeicaoContratada = Convert.ToInt64(hfIdRefeicaoContratada.Value) };

            return precoRefeicaoContrato;
        }
    }
}